home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGMISC
/
PCSSP.LZH
/
PC-SSP.ZIP
/
POLYROOT.ZIP
/
DPRBM.FOR
< prev
next >
Wrap
Text File
|
1985-11-29
|
8KB
|
252 lines
C
C ..................................................................
C
C SUBROUTINE DPRBM
C
C PURPOSE
C TO CALCULATE ALL REAL AND COMPLEX ROOTS OF A GIVEN
C POLYNOMIAL WITH REAL COEFFICIENTS.
C
C USAGE
C CALL DPRBM (C,IC,RR,RC,POL,IR,IER)
C
C DESCRIPTION OF PARAMETERS
C C - DOUBLE PRECISION INPUT VECTOR CONTAINING THE
C COEFFICIENTS OF THE GIVEN POLYNOMIAL. COEFFICIENTS
C ARE ORDERED FROM LOW TO HIGH. ON RETURN COEFFI-
C CIENTS ARE DIVIDED BY THE LAST NONZERO TERM.
C IC - DIMENSION OF VECTORS C, RR, RC, AND POL.
C RR - RESULTANT DOUBLE PRECISION VECTOR OF REAL PARTS
C OF THE ROOTS.
C RC - RESULTANT DOUBLE PRECISION VECTOR OF COMPLEX PARTS
C OF THE ROOTS.
C POL - RESULTANT DOUBLE PRECISION VECTOR OF COEFFICIENTS
C OF THE POLYNOMIAL WITH CALCULATED ROOTS.
C COEFFICIENTS ARE ORDERED FROM LOW TO HIGH (SEE
C REMARK 4).
C IR - OUTPUT VALUE SPECIFYING THE NUMBER OF CALCULATED
C ROOTS. NORMALLY IR IS EQUAL TO IC-1.
C IER - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
C IER=0 - NO ERROR,
C IER=1 - SUBROUTINE DPQFB RECORDS POOR CONVERGENCE
C AT SOME QUADRATIC FACTORIZATION WITHIN
C 100 ITERATION STEPS,
C IER=2 - POLYNOMIAL IS DEGENERATE, I.E. ZERO OR
C CONSTANT,
C OR OVERFLOW IN NORMALIZATION OF GIVEN
C POLYNOMIAL,
C IER=3 - THE SUBROUTINE IS BYPASSED DUE TO
C SUCCESSIVE ZERO DIVISORS OR OVERFLOWS
C IN QUADRATIC FACTORIZATION OR DUE TO
C COMPLETELY UNSATISFACTORY ACCURACY,
C IER=-1 - CALCULATED COEFFICIENT VECTOR HAS LESS
C THAN SIX CORRECT SIGNIFICANT DIGITS.
C THIS REVEALS POOR ACCURACY OF CALCULATED
C ROOTS.
C
C REMARKS
C (1) REAL PARTS OF THE ROOTS ARE STORED IN RR(1) UP TO RR(IR)
C AND CORRESPONDING COMPLEX PARTS IN RC(1) UP TO RC(IR).
C (2) ERROR MESSAGE IER=1 INDICATES POOR CONVERGENCE WITHIN
C 100 ITERATION STEPS AT SOME QUADRATIC FACTORIZATION
C PERFORMED BY SUBROUTINE DPQFB.
C (3) NO ACTION BESIDES ERROR MESSAGE IER=2 IN CASE OF A ZERO
C OR CONSTANT POLYNOMIAL. THE SAME ERROR MESSAGE IS GIVEN
C IN CASE OF AN OVERFLOW IN NORMALIZATION OF GIVEN
C POLYNOMIAL.
C (4) ERROR MESSAGE IER=3 INDICATES SUCCESSIVE ZERO DIVISORS
C OR OVERFLOWS OR COMPLETELY UNSATISFACTORY ACCURACY AT
C ANY QUADRATIC FACTORIZATION PERFORMED BY
C SUBROUTINE DPQFB. IN THIS CASE CALCULATION IS BYPASSED.
C IR RECORDS THE NUMBER OF CALCULATED ROOTS.
C POL(1),...,POL(J-IR) ARE THE COEFFICIENTS OF THE
C REMAINING POLYNOMIAL, WHERE J IS THE ACTUAL NUMBER OF
C COEFFICIENTS IN VECTOR C (NORMALLY J=IC).
C (5) IF CALCULATED COEFFICIENT VECTOR HAS LESS THAN SIX
C CORRECT SIGNIFICANT DIGITS THOUGH ALL QUADRATIC
C FACTORIZATIONS SHOWED SATISFACTORY ACCURACY, THE ERROR
C MESSAGE IER=-1 IS GIVEN.
C (6) THE FINAL COMPARISON BETWEEN GIVEN AND CALCULATED
C COEFFICIENT VECTOR IS PERFORMED ONLY IF ALL ROOTS HAVE
C BEEN CALCULATED. IN THIS CASE THE NUMBER OF ROOTS IR IS
C EQUAL TO THE ACTUAL DEGREE OF THE POLYNOMIAL (NORMALLY
C IR=IC-1). THE MAXIMAL RELATIVE ERROR OF THE COEFFICIENT
C VECTOR IS RECORDED IN RR(IR+1).
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C SUBROUTINE DPQFB QUADRATIC FACTORIZATION OF A POLYNOMIAL
C BY BAIRSTOW ITERATION.
C
C METHOD
C THE ROOTS OF THE POLYNOMIAL ARE CALCULATED BY MEANS OF
C SUCCESSIVE QUADRATIC FACTORIZATION PERFORMED BY BAIRSTOW
C ITERATION. X**2 IS USED AS INITIAL GUESS FOR THE FIRST
C QUADRATIC FACTOR, AND FURTHER EACH CALCULATED QUADRATIC
C FACTOR IS USED AS INITIAL GUESS FOR THE NEXT ONE. AFTER
C COMPUTATION OF ALL ROOTS THE COEFFICIENT VECTOR IS
C CALCULATED AND COMPARED WITH THE GIVEN ONE.
C FOR REFERENCE, SEE J. H. WILKINSON, THE EVALUATION OF THE
C ZEROS OF ILL-CONDITIONED POLYNOMIALS (PART ONE AND TWO),
C NUMERISCHE MATHEMATIK, VOL.1 (1959), PP.150-180.
C
C ..................................................................
C
SUBROUTINE DPRBM(C,IC,RR,RC,POL,IR,IER)
C
C
DIMENSION C(1),RR(1),RC(1),POL(1),Q(4)
DOUBLE PRECISION C,RR,RC,POL,Q,EPS,A,B,H,Q1,Q2
C
C TEST ON LEADING ZERO COEFFICIENTS
EPS=1.D-6
LIM=100
IR=IC+1
1 IR=IR-1
IF(IR-1)42,42,2
2 IF(C(IR))3,1,3
C
C WORK UP ZERO ROOTS AND NORMALIZE REMAINING POLYNOMIAL
3 IER=0
J=IR
L=0
A=C(IR)
DO 8 I=1,IR
IF(L)4,4,7
4 IF(C(I))6,5,6
5 RR(I)=0.D0
RC(I)=0.D0
POL(J)=0.D0
J=J-1
GO TO 8
6 L=1
IST=I
J=0
7 J=J+1
C(I)=C(I)/A
POL(J)=C(I)
CALL OVERFL(N)
IF(N-2)42,8,8
8 CONTINUE
C
C START BAIRSTOW ITERATION
Q1=0.D0
Q2=0.D0
9 IF(J-2)33,10,14
C
C DEGREE OF RESTPOLYNOMIAL IS EQUAL TO ONE
10 A=POL(1)
RR(IST)=-A
RC(IST)=0.D0
IR=IR-1
Q2=0.D0
IF(IR-1)13,13,11
11 DO 12 I=2,IR
Q1=Q2
Q2=POL(I+1)
12 POL(I)=A*Q2+Q1
13 POL(IR+1)=A+Q2
GO TO 34
C THIS IS BRANCH TO COMPARISON OF COEFFICIENT VECTORS C AND POL
C
C DEGREE OF RESTPOLYNOMIAL IS GREATER THAN ONE
14 DO 22 L=1,10
N=1
15 Q(1)=Q1
Q(2)=Q2
CALL DPQFB(POL,J,Q,LIM,I)
IF(I)16,24,23
16 IF(Q1)18,17,18
17 IF(Q2)18,21,18
18 GO TO (19,20,19,21),N
19 Q1=-Q1
N=N+1
GO TO 15
20 Q2=-Q2
N=N+1
GO TO 15
21 Q1=1.D0+Q1
22 Q2=1.D0-Q2
C
C ERROR EXIT DUE TO UNSATISFACTORY RESULTS OF FACTORIZATION
IER=3
IR=IR-J
RETURN
C
C WORK UP RESULTS OF QUADRATIC FACTORIZATION
23 IER=1
24 Q1=Q(1)
Q2=Q(2)
C
C PERFORM DIVISION OF FACTORIZED POLYNOMIAL BY QUADRATIC FACTOR
B=0.D0
A=0.D0
I=J
25 H=-Q1*B-Q2*A+POL(I)
POL(I)=B
B=A
A=H
I=I-1
IF(I-2)26,26,25
26 POL(2)=B
POL(1)=A
C
C MULTIPLY POLYNOMIAL WITH CALCULATED ROOTS BY QUADRATIC FACTOR
L=IR-1
IF(J-L)27,27,29
27 DO 28 I=J,L
28 POL(I-1)=POL(I-1)+POL(I)*Q2+POL(I+1)*Q1
29 POL(L)=POL(L)+POL(L+1)*Q2+Q1
POL(IR)=POL(IR)+Q2
C
C CALCULATE ROOT-PAIR FROM QUADRATIC FACTOR X*X+Q2*X+Q1
H=-.5D0*Q2
A=H*H-Q1
B=DSQRT(DABS(A))
IF(A)30,30,31
30 RR(IST)=H
RC(IST)=B
IST=IST+1
RR(IST)=H
RC(IST)=-B
GO TO 32
31 B=H+DSIGN(B,H)
RR(IST)=Q1/B
RC(IST)=0.D0
IST=IST+1
RR(IST)=B
RC(IST)=0.D0
32 IST=IST+1
J=J-2
GO TO 9
C
C SHIFT BACK ELEMENTS OF POL BY 1 AND COMPARE VECTORS POL AND C
33 IR=IR-1
34 A=0.D0
DO 38 I=1,IR
Q1=C(I)
Q2=POL(I+1)
POL(I)=Q2
IF(Q1)35,36,35
35 Q2=(Q1-Q2)/Q1
36 Q2=DABS(Q2)
IF(Q2-A)38,38,37
37 A=Q2
38 CONTINUE
I=IR+1
POL(I)=1.D0
RR(I)=A
RC(I)=0.D0
IF(IER)39,39,41
39 IF(A-EPS)41,41,40
C
C WARNING DUE TO POOR ACCURACY OF CALCULATED COEFFICIENT VECTOR
40 IER=-1
41 RETURN
C
C ERROR EXIT DUE TO DEGENERATE POLYNOMIAL OR OVERFLOW IN
C NORMALIZATION
42 IER=2
IR=0
RETURN
END